import {validate} from "../../src/index";
import {Post, PostType} from "./Post";

// Sample1. simple validation

let post1 = new Post();
post1.title = "Hello world"; // should pass
post1.text = "this is a great post about hello world"; // should pass
post1.rating = 10; // should pass
post1.email = "info@google.com"; // should pass
post1.site = "google.com"; // should pass
post1.createDate = new Date(); // should pass
post1.tags = ["abcd1", "abcd2", "abcd3", "abcd4", "abcd4"]; // should pass
post1.type = PostType.Private;

validate(post1).then(result => {
    console.log("1. should pass: ", result); // should pass completely, e.g. return empty array
});

let post2 = new Post();
post2.title = "Hello"; // should not pass
post2.text = "this is a great post about hell world"; // should not pass
post2.rating = 1.1; // should not pass
post2.email = "google.com"; // should not pass
post2.site = "googlecom"; // should not pass
post2.type = PostType.Private; // should pass

// should not pass because date property is missing
validate(post2).then(result => {
    console.log("2. should not pass: ", result); // should not pass completely, must return array of ValidationError-s
});

// Sample2. using validation options to skip properties that are not defined

let post3 = new Post();
post3.title = "Hello"; // should not pass
post3.text = "this is a great post about hell world"; // should not pass
post3.rating = 1.1; // should not pass
post3.email = "google.com"; // should not pass
post3.site = "googlecom"; // should not pass
post3.type = PostType.Private;

validate(post3, { skipMissingProperties: true }).then(result => {
    console.log("3. should not pass: ", result); // should not pass, but returned ValidationError-s should not have error about date field
});

let post4 = new Post();
post4.title = "Hello world"; // should pass
post4.text = "this is a great post about hello world"; // should pass
post4.rating = 10; // should pass
post4.email = "info@google.com"; // should pass
post4.site = "google.com"; // should pass
post4.type = PostType.Private;

validate(post4, { skipMissingProperties: true }).then(result => {
    console.log("4. should pass: ", result); // should pass even if date is not set
});

// Sample3. using validation groups

let post5 = new Post();
post5.title = "Hello world"; // should pass
post5.text = "this is a great post about hello world"; // should pass
post5.rating = 10; // should pass
post5.email = "info@google.com"; // should pass
post5.site = "google.com"; // should pass
post5.type = PostType.Private;

validate(post5, { skipMissingProperties: true }).then(result => {
    console.log("5. should pass: ", result); // should pass even if date is not set
});

// Sample4. array validation

let post6 = new Post();
post6.title = "Hello world"; // should pass
post6.text = "this is a great post about hello world"; // should pass
post6.rating = 10; // should pass
post6.email = "info@google.com"; // should pass
post6.site = "google.com"; // should pass
post6.createDate = new Date(); // should pass
post6.tags = ["abcd1", "abcd2", "abcd3", "abcd4", "abcd4"];
post6.type = PostType.Private;

validate(post6).then(result => {
    console.log("6. should pass: ", result); // should pass completely, e.g. return empty array
});

let post7 = new Post();
post7.title = "Hello world"; // should pass
post7.text = "this is a great post about hello world"; // should pass
post7.rating = 10; // should pass
post7.email = "info@google.com"; // should pass
post7.site = "google.com"; // should pass
post7.createDate = new Date(); // should pass
post7.tags = ["news", "a"];
post7.type = PostType.Private;

validate(post7).then(result => {
    console.log("7. should not pass: ", result); // should not pass
});

let post8 = new Post();
post8.title = "Hello world"; // should pass
post8.text = "this is a great post about hello world"; // should pass
post8.rating = 10; // should pass
post8.email = "info@google.com"; // should pass
post8.site = "google.com"; // should pass
post8.createDate = new Date(); // should pass
post8.tags = [];
post8.type = PostType.Private;

validate(post8).then(result => {
    console.log("8. should not pass: ", result); // should not pass
});

let post9 = new Post();
post9.title = "Hello world"; // should pass
post9.text = "this is a great post about hello world"; // should pass
post9.rating = 10; // should pass
post9.email = "info@google.com"; // should pass
post9.site = "google.com"; // should pass
post9.createDate = new Date(); // should pass
post9.tags = ["abcd1", "abcd2", "abcd3", "abcd4", "abcd4", "abcd4"];
post9.type = PostType.Private;

validate(post9).then(result => {
    console.log("9. should not pass: ", result); // should not pass
});

let post10 = new Post();
post10.title = "Hello world"; // should pass
post10.text = "this is a great post about hello world"; // should pass
post10.rating = 10; // should pass
post10.email = "info@google.com"; // should pass
post10.site = "google.com"; // should pass
post10.createDate = new Date(); // should pass
post10.tags = ["abcd1", "abcd2", "abcd3", "abcd4", "abcd4"];
post10.type = PostType.Private;

validate(post10).then(result => {
    console.log("10. should pass: ", result); // should pass
});

let post11 = new Post();
post11.title = "Hello world"; // should pass
post11.text = "this is a great post about hello world"; // should pass
post11.rating = 10; // should pass
post11.email = "info@google.com"; // should pass
post11.site = "google.com"; // should pass
post11.createDate = new Date(); // should pass
post11.tags = null;
post11.type = PostType.Private;

validate(post11).then(result => {
    console.log("11. should not pass: ", result); // should not pass
});

let post12 = new Post();
post12.title = "Hello world"; // should pass
post12.text = "this is a great post about hello world"; // should pass
post12.rating = 10; // should pass
post12.email = "info@google.com"; // should pass
post12.site = "google.com"; // should pass
post12.createDate = new Date(); // should pass
post12.tags = ["abcd1", "abcd2", "abcd3", "abcd4", "abcd4"]; // should pass
post12.type = 99; // should not pass

validate(post1).then(result => {
    console.log("12. should not pass: ", result); // should not pass as type is not a valid enum
});
